﻿using Abp.Application.Services;
using Abp.Application.Services.Dto;
using ARchGL.Platform.Dtos;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace ARchGL.Platform.Juneng
{
    /// <summary>
    /// 公告服务 接口
    /// </summary>
    public interface INoticesAppService : IApplicationService
    {
        /// <summary>
        /// 发布公告
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<Guid> Create(CreateNoticesInput input);

        Task Modify(ModifyNoticesInput input);
       
        /// <summary>
        /// 批量删除公告
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task BatchRemove(List<Guid> input);

        /// <summary>
        /// 标记隐藏/显示，根据当前状态反转
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task MarkHideOrShow(Guid input);

        /// <summary>
        /// 批量标记已读
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task BatchMarkRead(List<Guid> input);

        Task MarkAllRead();

        /// <summary>
        /// 删除自己的公告
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task BatchRemoveByCurrentUser(List<Guid> input);

        Task<dynamic> QueryTopList(int input);

        Task<NoticeDetailDto> QueryDetailById(Guid input);

        /// <summary>
        /// 获取公告-分页数据集合
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<NoticesDto>> QueryPagedList(QueryNoticesInput input);

        Task<PagedResultDto<NoticesDto>> QueryMyPagedList(QueryNoticesInput input);

        Task<int> QueryMyOverview();

        #region RemoteService

        Task SendNotice(SecurityChecksInput input);

        Task SendNotice(TurnOverCheckInput input);

        Task SendNotice(SecurityCheckDto input);

        Task SendNotice(SecurityCheckAndFeedbacksInput input);

        Task SendNotice(SelfChecksInput input);

        Task SendNotice(SelfChecksDto input);

        #endregion
    }
}
